而不是写这个
declare @name varchar(255),
@table varchar(255) = 'mytable',
@column varchar(255) = 'mykeycolumn',
@validkey varchar(255) = 'mykeyIwanttokeep'
SELECT @name = CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME = @table
AND COLUMN_NAME = @column
AND (CONSTRAINT_NAME != @validkey or @validkey is null)
declare @sql varchar(1023) = 'alter table ' + @table + ' drop ' + @name
exec (@sql)
我想要这样的事情:
$criteria = 'id=' + '"' + $pdt_code + '"'
但是Powershell没有评估表达式,为什么:什么是正确的语法?
为什么这样做而不是上述(见List all nodes which sub-node meta contains some value 123456)?
$criteria = 'id="$($pdt_code)"'
答案 0 :(得分:3)
仅评估双引号字符串"..."
内的变量。你的字符串是单引号:
$criteria = 'id="$($pdt_code)"'
# ^ single quotes ^
你应该写:
$criteria = "id=""$pdt_code"""
另请注意,您需要将字符串中的"
字符加倍,以便PowerShell将它们视为文字"
字符,而不是字符串的结尾。
您的第二个示例有效,因为它使用的是双引号字符串(用于评估变量):
$meta = $xml.SelectSingleNode("//catalogue/produits/produit[@id='$($_.id)']/metas/meta[@code='$meta_code']")
# ^ double quotes ^
解析字符串文字时,PowerShell只关心字符串末尾的引号字符。