我需要提供一个powershell脚本,它运行一系列步骤来安装自定义解决方案.其中一个步骤是创建SQL Server数据库并执行.sql文件以生成架构.
问题是我需要一种在任何机器上执行它的方法,无论是否在本地安装SQL服务器(它通常在另一台网络机器上).此外,我需要避免使用第三方模块,因为我无法强制客户端安装它们.
有办法做到这一点吗?
更新:运行脚本的服务器将安装.NET 4.5,因为将安装SharePoint 2013.
情况
我有一个SQL脚本,我需要将一些基本数据推送到我的数据库.因此,我使用以下脚本(和其他).我想手动为我手动创建的行提供主键.
问题
如果我执行脚本,它会说我需要启用IDENTITY_INSERT.我添加了这一行SET IDENTITY_INSERT UserGroups ON;尽可能多的例子,但是当我添加它时它仍然会给出相同的错误.
SET IDENTITY_INSERT UserGroups ON;
GO
INSERT INTO UserGroups VALUES (0, 0);
Run Code Online (Sandbox Code Playgroud)
运行脚本时出错:
只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'UserGroups'中标识列的显式值.
题
我是否还需要在数据库中更改某些内容,或者在脚本中是否还有其他内容可以手动添加主键?
细节
我使用SQL Server 2016 Management Studio.
我使用DDL Script for SQL脚本
我使用Entity Framework.
我在这张表中有两列
c# database sql-server sql-scripts management-studio-express
是否SET IDENTITY_INSERT [Table] ON仍然超出SQL脚本的范围?我想知道是否需要将其显式设置为"OFF",或者SQL Server是否知道它应该只对当前脚本使用该设置.
谢谢!
有没有办法获取对象上下文的所有SQL更改脚本?
注意:我不是在谈论ObjectQuery.ToTraceString();
我知道这不是什么大问题,但是无论如何我都会感到挠痒。
“消息156,级别15,状态1,过程cpromo_Get_ConsultDetails_PromotionBan,第59行关键字'PROCEDURE'附近的语法不正确。
这是我的脚本示例:
ALTER PROCEDURE [dbo].[cpromo_Get_ConsultDetails_PromotionBan]
(
@idPromoBan int,
@uid int
)
AS
begin
set nocount on;
/* 1- detail de la promo */
SELECT p.[nopromo], p.[StartDate], p.[EndDate], p.[DateText]
FROM [cpromo_PromotionBanniere] as pb
INNER JOIN [cpromo_Promotions] as p ON p.[idPromo] = pb.[idPromo]
WHERE (pb.[idPromoBan] = @idPromoBan)
/* 2 - cartes de la promo */
SELECT pis.[idCardText], ct.[nom], ct.[descr], ct.[prix], ct.[prixCoupon], ct.[qtyItem], i.[Impact]
FROM [cpromo_PromotionsItems] as pis
INNER JOIN [cpromo_Impacts] as i ON i.[idImpact] = …Run Code Online (Sandbox Code Playgroud) 我写了一个脚本来创建一个数据库:
1:使用主机;
2: IF (db_id('myDB') 为空)
3: CREATE DATABASE myDB;
4:使用myDB;
但它不起作用...我收到一个错误:无法在 sysdatabases 中找到数据库“myDB”的条目。未找到具有该名称的条目。确保正确输入名称。(讯息911 )
我的错误在哪里?
谢谢。
答案:
go go go
有用的链接: 如果不使用 GO,以编程方式,您将需要进行 2 个单独的数据库调用。
我在linux debian的文件夹(/ home/myHSH/scripts)中有很多.sql文件.我想知道执行或运行文件夹中的所有sql文件到postgreSQL v9.1数据库的命令.
PostgreSQL信息:
Database name=coolDB
User name=coolUser
Run Code Online (Sandbox Code Playgroud)
很高兴:如果你知道如何通过GUI工具执行多个sql文件,就像pgAdmin3一样.
我想为我的oracle DB创建一个脚本,它会丢弃表.如果表不存在,脚本将不会退出失败,只需打印文本:" 不存在 ".
该脚本如下:
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE mytable';
DBMS_Output.Put_Line(' table dropped');
EXCEPTION WHEN OTHERS THEN
IF SQLCODE = -942 THEN
DBMS_Output.Put_Line(' table not exists');
ELSE
DBMS_Output.Put_Line(' Unknown exception while dropping table');
RAISE;
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
我想在一个脚本中删除很多表,我不想多次写这些行.
有没有办法,把它写入获取参数(表名)的过程或函数,并在该脚本中调用此过程?
也许是这样的:
drop_table_procedure('mytableA');
drop_table_procedure('mytableB');
Run Code Online (Sandbox Code Playgroud)
或者可能是一个过程,它获取一个未定义的大小列表(如在java:String ...表名中):
drop_tables_procedure('mytableA','mytableB');
Run Code Online (Sandbox Code Playgroud)
请举个例子.谢谢!
我需要编写 SQL 脚本,如果在数据库中找不到某些值,该脚本就会停止。像这样的东西(伪代码):
BEGIN;
...
set @a = (select ... );
if @a IS NULL THEN STOP_WITH_ERROR_AND_ROLLBACK();
...
COMMIT;
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我吗?
更新:由于某些原因,我无法使用存储过程或函数。
更新2:注意:我不需要显式回滚。脚本执行的中断就足够了。它自动回滚未提交事务的更改。
到目前为止,我已经发现要描述一个表格,我可以使用以下内容:
select dbms_metadata.get_ddl('TABLE','<my table name>','<table owner>') from dual;
Run Code Online (Sandbox Code Playgroud)
我还发现我可以使用以下语句从当前用户那里获取表列表:
select table_name from user_tables;
Run Code Online (Sandbox Code Playgroud)
但是,我需要找到一种将这两者结合起来的方法,以便我得到一个(最好是 SQL 文件)输出,它基本上描述了当前模式中的所有表。我该怎么办?
sql-scripts ×10
sql ×4
database ×3
sql-server ×3
oracle ×2
alter ×1
alter-table ×1
c# ×1
command-line ×1
function ×1
mysql ×1
plsql ×1
powershell ×1
procedure ×1
select ×1
ssms ×1